package com.gpstracking.BE;

import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 * A data access object (DAO) providing persistence and search support for
 * Condicioninmovilidad entities. Transaction control of the save(), update()
 * and delete() operations must be handled externally by senders of these
 * methods or must be manually added to each of these methods for data to be
 * persisted to the JPA datastore.
 * 
 * @see com.gpstracking.BE.Condicioninmovilidad
 * @author MyEclipse Persistence Tools
 */

public class CondicioninmovilidadDAO implements ICondicioninmovilidadDAO {
	// property constants
	public static final String TIEMPO_INMOVILIDAD = "tiempoInmovilidad";
	public static final String MINIMO_MAXIMO = "minimoMaximo";

	private EntityManager getEntityManager() {
		return EntityManagerHelper.getEntityManager();
	}

	/**
	 * Perform an initial save of a previously unsaved Condicioninmovilidad
	 * entity. All subsequent persist actions of this entity should use the
	 * #update() method. This operation must be performed within the a database
	 * transaction context for the entity's data to be permanently saved to the
	 * persistence store, i.e., database. This method uses the
	 * {@link javax.persistence.EntityManager#persist(Object)
	 * EntityManager#persist} operation.
	 * 
	 * <pre>
	 * EntityManagerHelper.beginTransaction();
	 * CondicioninmovilidadDAO.save(entity);
	 * EntityManagerHelper.commit();
	 * </pre>
	 * 
	 * @param entity
	 *            Condicioninmovilidad entity to persist
	 * @throws RuntimeException
	 *             when the operation fails
	 */
	public void save(Condicioninmovilidad entity) {
		EntityManagerHelper.log("saving Condicioninmovilidad instance",
				Level.INFO, null);
		try {
			getEntityManager().persist(entity);
			EntityManagerHelper.log("save successful", Level.INFO, null);
		} catch (RuntimeException re) {
			EntityManagerHelper.log("save failed", Level.SEVERE, re);
			throw re;
		}
	}

	/**
	 * Delete a persistent Condicioninmovilidad entity. This operation must be
	 * performed within the a database transaction context for the entity's data
	 * to be permanently deleted from the persistence store, i.e., database.
	 * This method uses the
	 * {@link javax.persistence.EntityManager#remove(Object)
	 * EntityManager#delete} operation.
	 * 
	 * <pre>
	 * EntityManagerHelper.beginTransaction();
	 * CondicioninmovilidadDAO.delete(entity);
	 * EntityManagerHelper.commit();
	 * entity = null;
	 * </pre>
	 * 
	 * @param entity
	 *            Condicioninmovilidad entity to delete
	 * @throws RuntimeException
	 *             when the operation fails
	 */
	public void delete(Condicioninmovilidad entity) {
		EntityManagerHelper.log("deleting Condicioninmovilidad instance",
				Level.INFO, null);
		try {
			entity = getEntityManager().getReference(
					Condicioninmovilidad.class,
					entity.getIdCondicionInmovilidad());
			getEntityManager().remove(entity);
			EntityManagerHelper.log("delete successful", Level.INFO, null);
		} catch (RuntimeException re) {
			EntityManagerHelper.log("delete failed", Level.SEVERE, re);
			throw re;
		}
	}

	/**
	 * Persist a previously saved Condicioninmovilidad entity and return it or a
	 * copy of it to the sender. A copy of the Condicioninmovilidad entity
	 * parameter is returned when the JPA persistence mechanism has not
	 * previously been tracking the updated entity. This operation must be
	 * performed within the a database transaction context for the entity's data
	 * to be permanently saved to the persistence store, i.e., database. This
	 * method uses the {@link javax.persistence.EntityManager#merge(Object)
	 * EntityManager#merge} operation.
	 * 
	 * <pre>
	 * EntityManagerHelper.beginTransaction();
	 * entity = CondicioninmovilidadDAO.update(entity);
	 * EntityManagerHelper.commit();
	 * </pre>
	 * 
	 * @param entity
	 *            Condicioninmovilidad entity to update
	 * @return Condicioninmovilidad the persisted Condicioninmovilidad entity
	 *         instance, may not be the same
	 * @throws RuntimeException
	 *             if the operation fails
	 */
	public Condicioninmovilidad update(Condicioninmovilidad entity) {
		EntityManagerHelper.log("updating Condicioninmovilidad instance",
				Level.INFO, null);
		try {
			Condicioninmovilidad result = getEntityManager().merge(entity);
			EntityManagerHelper.log("update successful", Level.INFO, null);
			return result;
		} catch (RuntimeException re) {
			EntityManagerHelper.log("update failed", Level.SEVERE, re);
			throw re;
		}
	}

	public Condicioninmovilidad findById(Integer id) {
		EntityManagerHelper.log(
				"finding Condicioninmovilidad instance with id: " + id,
				Level.INFO, null);
		try {
			Condicioninmovilidad instance = getEntityManager().find(
					Condicioninmovilidad.class, id);
			return instance;
		} catch (RuntimeException re) {
			EntityManagerHelper.log("find failed", Level.SEVERE, re);
			throw re;
		}
	}

	/**
	 * Find all Condicioninmovilidad entities with a specific property value.
	 * 
	 * @param propertyName
	 *            the name of the Condicioninmovilidad property to query
	 * @param value
	 *            the property value to match
	 * @return List<Condicioninmovilidad> found by query
	 */
	@SuppressWarnings("unchecked")
	public List<Condicioninmovilidad> findByProperty(String propertyName,
			final Object value) {
		EntityManagerHelper.log(
				"finding Condicioninmovilidad instance with property: "
						+ propertyName + ", value: " + value, Level.INFO, null);
		try {
			final String queryString = "select model from Condicioninmovilidad model where model."
					+ propertyName + "= :propertyValue";
			Query query = getEntityManager().createQuery(queryString);
			query.setParameter("propertyValue", value);
			return query.getResultList();
		} catch (RuntimeException re) {
			EntityManagerHelper.log("find by property name failed",
					Level.SEVERE, re);
			throw re;
		}
	}

	public List<Condicioninmovilidad> findByTiempoInmovilidad(
			Object tiempoInmovilidad) {
		return findByProperty(TIEMPO_INMOVILIDAD, tiempoInmovilidad);
	}

	public List<Condicioninmovilidad> findByMinimoMaximo(Object minimoMaximo) {
		return findByProperty(MINIMO_MAXIMO, minimoMaximo);
	}

	/**
	 * Find all Condicioninmovilidad entities.
	 * 
	 * @return List<Condicioninmovilidad> all Condicioninmovilidad entities
	 */
	@SuppressWarnings("unchecked")
	public List<Condicioninmovilidad> findAll() {
		EntityManagerHelper.log("finding all Condicioninmovilidad instances",
				Level.INFO, null);
		try {
			final String queryString = "select model from Condicioninmovilidad model";
			Query query = getEntityManager().createQuery(queryString);
			return query.getResultList();
		} catch (RuntimeException re) {
			EntityManagerHelper.log("find all failed", Level.SEVERE, re);
			throw re;
		}
	}

}